home *** CD-ROM | disk | FTP | other *** search
/ Resource for Source: C/C++ / Resource for Source - C-C++.iso / misc_src / cslib16b / include / cstable.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-01  |  4.4 KB  |  155 lines

  1. /***********************************************************************
  2.  
  3.                                       CSDB Library, Version 1.6.b 
  4.                                          Released: March 2nd 1995 
  5.  
  6.        Header file of the TABLE class.
  7.  
  8.                                            Copyright(c) 1994,1995 
  9.                                                            Combis 
  10.                                                   The Netherlands 
  11. ***********************************************************************/
  12.  
  13. #ifndef __CSTABLE_H
  14. #define __CSTABLE_H
  15.  
  16. #include "cstools.h"
  17. #include "csedstr.h"
  18. #include "stdio.h"
  19. #include "csheap.h"
  20.  
  21.  
  22. typedef union
  23. {
  24.   void * p;
  25.   long     l;
  26. } dapo;
  27.  
  28. class TABLE
  29. {
  30.    protected:
  31.  
  32.  
  33.       typedef struct
  34.       {
  35.      void *up;
  36.      void *le;
  37.      void *ri;
  38.      long key;
  39.      void *dw;
  40.      int  count;
  41.       }  inbl;           //INdex Block
  42.  
  43.       typedef struct
  44.       {
  45.      void *up;
  46.      void *le;
  47.      void *ri;
  48.      long key;
  49.      dapo data;
  50.       }  dabl;           //DAta Block
  51.  
  52.  
  53.  protected:
  54.  
  55.       HEAP   data;
  56.       STR    d_name;
  57.  
  58.       void  *anchor;
  59.       int    max_lin_search;
  60.       int    nr_layers;
  61.       int    anco;
  62.       long   daco;     // number of data blocks
  63.       long   chle;     // chain length count
  64.       long   nrse;     // number of searches
  65.       void  *current;
  66.       int    is_open;
  67.  
  68. public:
  69.       long blocks(void)     { return data.blocks(); }
  70.  
  71. protected:
  72.       int  locate(long l,void * &data,void * &index,int &depth);
  73.       int  loc_near(long l,void *& p);
  74.       void remove_d(void *p)    { data.vfree(p); }
  75.       void remove_i(void *p)    { data.vfree(p); }
  76.       dabl *create_d(long l,dapo d);
  77.       inbl *create_i(long l);
  78.       void inc_ia(void *i)    { if(i) ((inbl *)i)->count++; else anco++; }
  79.       void dec_ia(void *i)    { if(i) ((inbl *)i)->count--; else anco--; }
  80.       int  insert_i(void *ib,void *hi);
  81.       void insert_nl(void *ne);
  82.       int  c_mls(void)        { return max_lin_search; }
  83.       void set_dc(long l)    { daco=l; }
  84.       void inc_dc(void)     { daco++; }
  85.       void dec_dc(void)     { daco--; }
  86.       void reorg_i(void *p);
  87.       void check_hole(void *ip);
  88.  
  89.       int  zap2(void);
  90.  
  91.  
  92.       void connect_h(void *le,void *ri)  { if(ri) ((inbl *)ri)->le=le; if(le) ((inbl *)le)->ri=ri; }
  93.       void connect_ud(void *up,void *dw) { ((inbl *)up)->dw=dw; ((inbl *)dw)->up=up; }
  94.       void connect_ad(void *dw)      { anchor=dw; }
  95.       void connect_uds(void *up,int count,void *dw);
  96.       void connect_uds(void *up,void *dw) { ((inbl *)up)->dw=dw;  connect_uds(up, ((inbl *)up)->count, dw); }
  97.  
  98.  
  99.  
  100.    public:
  101.       TABLE(void);
  102.       ~TABLE(void);
  103.  
  104.       void init_vars(void);
  105.       void init_defaults(void);
  106.  
  107.  
  108. //////////////////////// Work ///////////////////////////////
  109.  
  110.  
  111.       int insert(long l,dapo  d,dapo  *& daddr);
  112.       int insert(long l,void *d,void **& daddr);
  113.       int insert(long l,long  d,long  *& daddr);
  114.  
  115.       int insert(long l,void *d) { void **ad; return insert(l,d,ad); }
  116.       int insert(long l,dapo  d) { dapo  *ad; return insert(l,d,ad); }
  117.       int insert(long l,long  d) { long  *ad; return insert(l,d,ad); }
  118.  
  119.       int delet(long l);
  120.       int report(CSCHAR *filename,int sub=10);
  121.       void report(FILE *fp,int sub=10);
  122.  
  123.       int search(long l,dapo  &d,dapo *&daddr);
  124.       int search(long l,void * &d,void **& daddr);
  125.       int search(long l,void * &d) { void ** add; return search(l,d,add); }
  126.       int search(long l,long   &d,long *& daddr);
  127.       int search(long l,long   &d) { long * add; return search(l,d,add); }
  128.  
  129.       int search_lt(long key,long &l,void * &d);
  130.       int search_le(long key,long &l,void * &d);
  131.       int search_gt(long key,long &l,void * &d);
  132.       int search_ge(long key,long &l,void * &d,void ** &addr);
  133.       int next(long &l,void * &d,void ** &addr);
  134.       int prev(long &l,void * &d);
  135.       long number(void) { return daco; }
  136.  
  137.       long export(FILE *fp);
  138.       long import(FILE *fp,long number);
  139.  
  140.  
  141. //////////////////////// Setup //////////////////////////////
  142.       int  set_mls(int l) { return max_lin_search=max(l,2); }       // max lineair search
  143.       void name(CSCHAR *s)  { debug_name(s); }
  144.       void debug_name(CSCHAR *s);
  145.  
  146. //////////////////////// Control ////////////////////////////////////////
  147.       int  empty(void);
  148.       int  zap(void);
  149.       int  open(void);
  150.       int  close(void);
  151.  
  152. };
  153.  
  154. #endif
  155.